3 Installer QEmu > 3.2 Compiler à partir des sources


3.2 Compiler à partir des sources

Le projet QEmu est hébergé sur le site Savannah (http://savannah.nongnu.org), spécialisé dans la fourniture d'outils et de services pour la création de logiciels libres.

QEmu est écrit en C. La partie multimédia met à contribution les bibliothèques SDL. QEmu est optimisé pour être compilé avec GCC 3.x. Utiliser une version plus récente risque de produire un résultat inutilisable.

Le code source de QEmu est accessible au travers du système de gestion de versions CVS (Concurrent Versions System – http://fr.wikipedia.org/wiki/CVS)

3.2.1 Préparation de l'environnement de compilation

QEmu a vu le jour dans un environnement Linux. Afin de pouvoir compiler le projet sous Windows, il nous faut d'abord recréer cet environnement permettant aux outils utilisés de fonctionner correctement.

Si l'anglais ne vous fait pas peur, il existe une procédure toute faite ici : http://qemu.dad-answers.com/viewtopic.php?t=73. Merci à Comike (http://perso.wanadoo.es/comike) pour son mode d'emploi, qui m'a bien servi d'ailleurs pour compiler mes propres versions.

3.2.1.1 Téléchargement des outils nécessaires

Pour pouvoir compiler facilement le code source de QEmu, nous devons lui préparer un environnement aussi proche que possible de son environnement natif. Voici donc la liste des composants à télécharger et à installer.

Composant

Lien

Commentaire

MSYS-1.0.10

http://prdownloads.sf.net/mingw/MSYS-1.0.10.exe?download

Shell Linux pour Windows. Permet de taper des commandes comme si on était sous Linux.

MsysDTK-1.0.1

http://prdownloads.sf.net/mingw/msysDTK-1.0.1.exe?download

Composants supplémentaires pour permettre la compilation de MSYS.

MinGW-3.1

http://prdownloads.sf.net/mingw/MinGW-3.1.0-1.exe?download

Le compilateur GCC proprement dit, dans sa version adaptée pour Windows.

SDL-1.2.8

http://www.libsdl.org/release/SDL-1.2.8.tar.gz

La bibliothèque multimedia utilisée pour QEmu.

Zlib-1.2.2

http://prdownloads.sourceforge.net/libpng/zlib-1.2.2.tar.gz?download

Support des images PNG

Directx-devel

http://www.libsdl.org/extras/win32/common

Support DirectX

3.2.1.2 Construction de l'environnement

L'étape suivante se déroule dans MSYS. Repérez l'icône MSYS que l'installation a du créer sur votre bureau, et double-cliquez la.


Vous vous trouvez maintenant dans un shell de type Linux.


Illustration 1: Environnement MSYS


A l'invite $, tapez la commande pwd (ne tapez jamais le $ en début de ligne, c'est l'invite)

$ pwd
/home/<NomUtilisateur>

La commande affiche alors le nom du dossier courant : /home/<NomUtilisateur>

Avec l'explorateur Windows (par exemple), copiez les fichiers SDL-1.2.8.tar.gz, zlib-1.2.2.tar.gz et directx-devel.tar.gz dans le dossier C:\MSYS\home\<NomUtilisateur>.

Installation de directx-devel :

$ cd
$ tar -C /mingw -xzvf directx-devel.tar.gz



Compilation et installation de SDL :

$ tar -xzvf SDL-1.2.8.tar.gz
$ cd SDL-1.2.8
$ ./configure –-prefix=/mingw
$ make
$ make install



Compilation et installation de zlib :

$ cd
$ tar -xzvf zlib-1.2.2.tar.gz
$ cd zlib-1.2.2
$ ./configure –prefix=/mingw
$ make test
$ make install



Ces opérations peuvent prendre quelques minutes, soyez patient...

Maintenant que cette étape est terminée, notre environnement est prêt pour la compilation de QEmu proprement dit. En principe, vous n'aurez pas besoin de repasser par cette préparation.

3.2.2 Télécharger le code source

Cette opération se déroule dans l'environnement MSYS, démarrez-le si ce n'est déjà fait.

Avant de compiler QEmu, il faut télécharger les derniers sources depuis le dépôt CVS. Assurez-vous d'être dans votre dossier racine (/home/<NomUtilisateur>) avant de mettre les sources à jour.

$ cd
$ cvs -z3 -d:pserver:anoncvs@cvs.savannah.nongnu.org:/cvsroot/qemu co qemu

Cette commande va rapatrier les derniers changements appliqués au code source par l'auteur. Nous sommes maintenant prêts pour lancer la compilation.

3.2.3 Appliquer un patch

Vous trouverez assez facilement des patches pour qemu, car bon nombre de développeurs à travers le monde corrigent et améliorent le programme tous les jours, même si la décision finale d'intégrer telle ou telle portion de code appartient généralement à Fabrice BELLARD. La liste de diffusion des développeurs (http://lists.gnu.org/archive/html/qemu-devel/) est l'endroit idéal pour glaner ces petites modifications.

Si vous désirez appliquer un correctif avant de compiler les sources, voici comment procéder.

Créez tout d'abord un dossier dans lequel vous placerez vos rustines. Je vous propose d'utiliser le répertoire /home/<NomUtilisateur>/patch. Copiez le fichier contenant le correctif dans ce dossier. Les patches se présentent généralement sous la forme d'un fichier diff, comme dans l'exemple suivant :

Index: vl.c
===================================================================
RCS file: /sources/qemu/qemu/vl.c,v
retrieving revision 1.206
diff -u -r1.206 vl.c
--- vl.c 6 Aug 2006 13:36:11 -0000 1.206
+++ vl.c 7 Aug 2006 03:53:22 -0000
@@ -4539,7 +4539,11 @@
     BlockDriverInfo bdi1, *bdi = &bdi1;
     QEMUFile *f;
     int saved_vm_running;
+#ifdef _WIN32
+    struct _timeb tb;
+#else
     struct timeval tv;
+#endif

     bs = get_bs_snapshots();
     if (!bs) {
@@ -4567,9 +4571,15 @@
     }

     /* fill auxiliary fields */
+#ifdef _WIN32
+    _ftime(&tb);
+    sn->date_sec = tb.time;
+    sn->date_nsec = tb.millitm * 1000000;
+#else
     gettimeofday(&tv, NULL);
     sn->date_sec = tv.tv_sec;
     sn->date_nsec = tv.tv_usec * 1000;
+#endif
     sn->vm_clock_nsec = qemu_get_clock(vm_clock);
     
     if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {


Ce fichier liste les modifications à apporter aux fichiers sources que vous avez téléchargés. L'exemple ci-dessus s'applique à vl.c, mais plusieurs fichiers sources peuvent être modifiés par le même patch.

Placez vous dans le répertoire qemu, puis appliquez le patch avec les instructions suivantes :

$ cd qemu
$ patch < ../patch/qemu-20060807-compile.patch
patching file `vl.c'

Le nom du fichier contenant le code modifié est ici qemu-20060807-compile.patch, mais il est évident qu'il faudra le remplacer par celui du fichier que vous aurez téléchargé.

Vous pouvez maintenant passer au chapitre suivant pour lancer la compilation.

Si le correctif cause l'échec de la compilation, remettez simplement tous vos sources à jour avec la commande cvs.

3.2.4 Compilation des sources

$ cd qemu
$ ./configure –target-list=i386-softmmu --static



Le résultat de cette commande doit ressembler à ceci :

Install prefix    /c/Program Files/Qemu
BIOS directory    /c/Program Files/Qemu
binary directory  /c/Program Files/Qemu
Source path       /home/Denis/qemu
C compiler        gcc
Host C compiler   gcc
make              make
install           install
host CPU          i386
host big endian   no
target list       i386-softmmu
gprof enabled     no
profiler          no
static build      yes
SDL support       yes
SDL static link   yes
mingw32 support   yes
Adlib support     no
CoreAudio support no
ALSA support      no
DSound support    no
FMOD support      no
kqemu support     yes
Documentation     no

Vérifier surtout les lignes SDL. Elles doivent être à « yes ». Si ce n'est pas le cas, retournez à l'étape d'extraction et d'installation de SDL (Construction de l'environnement), puis continuez la procédure jusqu'à arriver ici de nouveau. Si la ligne Documentation est à « no », ce n'est pas un problème.

La compilation, enfin !, se lance par :

$ make



Quelques messages d'avertissement (Warning) peuvent s'afficher pendant la compilation. Ce n'est pas un problème. A la fin de la compilation, vérifiez qu'il n'y a pas d'erreur.

Si la compilation se termine sur une erreur, entrez une commande make clean, puis relancez make. Si cela ne corrige pas l'erreur, il est possible que l'un des fichiers sources contienne une erreur : attendez alors quelques heures, puis mettez vos sources à jour; les erreurs de ce type sont souvent corrigées très rapidement.

Une dernière étape, facultative, va permettre de réduire un peu la taille de l'exécutable en retirant toutes les informations inutiles.

$ strip i386-softmmu/qemu.exe
$ strip qemu-img.exe

Nous avons maintenant deux fichiers exécutables :

C:\MSYS\home\<NomUtilisateur>\qemu\i386-softmmu\qemu.exe

C:\MSYS\home\<NomUtilisateur>\qemu\qemu-img.exe



Vous pouvez quitter MSYS :

$ exit

3.2.5 Installation

Ce chapitre traite de l'installation de QEmu sans le module accélérateur (Kqemu). Celui-ci sera abordé dans le chapitre suivant. QEmu fonctionne parfaitement sans ce module, mais les performances seront nettement meilleures s'il est utilisé.

Si vous avez choisi de télécharger une version installable de QEmu, ce chapitre se résume à exécuter ce fichier. Vous pouvez passer au chapitre suivant (paragraphe 3.3, page 9).

Si vous êtes passé par la compilation, voyons comment nous pouvons installer QEmu.

Dans la mesure où QEmu ne fait appel à aucun composant particulier, l'installation se limite à la copie de quelques fichiers.

Nous allons préparer la structure de dossiers pour QEmu. Pour l'exemple, nous partirons d'un dossier créé dans la racine du disque dur, mais tout autre point de départ est valable. Pensez simplement à adapter les chemins.

Cette structure n'a aucun caractère obligatoire, mais elle va servir de base pour ce document.

La suite de ce manuel suppose que le répertoire par défaut est C:\QEMU. Dans une invite de commandes, tapez :

C:\Documents and Settings\Nom>CD \QEMU
C:\QEMU>



QEmu est maintenant fonctionnel en tant qu'application. Mais il a encore besoin de quelques fichiers pour pouvoir démarrer. Ce point sera abordé dans le chapitre Démarrage rapide de QEmu (paragraphe 4, page 10).